// HTTP请求工具，替代uniCloud云对象
const { get, post } = require('./request.js')

const Route = (path, ui) => {
	// 返回一个代理对象，将云对象方法调用转换为HTTP请求
	return new Proxy({}, {
		get(target, methodName) {
			return async function(...params) {
				try {
					// 根据不同的云对象路径和方法名构建API接口
					let apiUrl = ''
					let requestData = params[0] || {}
					
					// 根据云对象名称映射到对应的API路径
					switch(path) {
						case 'get-public-data':
							// 处理特殊的用户信息接口
							if (methodName === 'otherUserInfo') {
								apiUrl = `/user/otherUserInfo?userId=${requestData}`
							} else {
								apiUrl = `/api/public/${methodName}`
							}
							break
						case 'get-private-data':
							// 处理特殊的用户信息接口
							if (methodName === 'getUserInfo') {
								apiUrl = `/user/userinfo`
							} else {
								apiUrl = `/api/private/${methodName}`
							}
							break
						case 'add-private-data':
							apiUrl = `/api/private/${methodName}`
							break
						case 'update-private-data':
							apiUrl = `/api/private/${methodName}`
							break
						case 'uni-id-co':
							apiUrl = `/api/auth/${methodName}`
							break
						default:
							apiUrl = `/api/${path}/${methodName}`
					}
					
					// 发送HTTP请求
					let response
					if (methodName === 'getUserInfo' || methodName === 'otherUserInfo') {
						// 用户信息接口使用GET请求
						response = await get(apiUrl)
					} else {
						// 其他接口使用POST请求
						response = await post(apiUrl, requestData)
					}
					
					// 返回格式化的响应数据
					return {
						result: response.data.data || response.data,
						code: response.data.code || 0,
						message: response.data.message || response.data.msg || 'success'
					}
				} catch (error) {
					// 统一错误处理
					throw new Error(`${methodName}: ${error.message || '请求失败'}`)
				}
			}
		}
	})
}

module.exports = Route;